package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**  JDK之后Java推出了一个新特性:lambda表达式
 * lambda可以让我们使用更简洁的语法来创建匿名内部类
 * 但前提是所实现的接口只能有一个抽象方法----函数式接口
 * 使用lambda可以重点体现方法的逻辑，让方法更优雅
 * 语法：(参数列表)->{
 * 方法体
 * }
 *
 * */
public class LambdaDemo1 {
    public static void main(String[] args) {
        List<String> list= new ArrayList<>(); //泛型<String> 字符串类型 <>所代表的是集合中的所代表的类型

        //匿名内部类写法
        Collections.sort (list, new Comparator<String>() {   //sort代表排序括号中要填写list,new一个然后回车
            @Override//重写的标志
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });//默认的写法可以在优化 记得要带  ->  在方法体和括号之间
       //lambda表达式写法   表达式中的参数类型可以不写
                                                                                                                                                                                                                                                                                                                              Collections.sort (list ,(o1, o2)-> {
             return o1.length()-o2.length();
            }
        );
  //lambda表达式方法体只有一句代码，大括号可以不写     也就是方法体的{}可以不写，如果有return也一并不写
        Collections.sort (list ,(o1, o2)->   o1.length()-o2.length()      //前减后升序
        );
//lambda表达式的方法参数若只有一个，那么（）可以忽略不写-------本案例不适合
  //抽象方法只有一个的时候 才可以使用lambda表达式

    }
}
